package main

import (
	"context"
	"github.com/olivere/elastic/v7"
	"log"
	"os"
)

type Account struct {
	AccountNumber int32  `json:"account_number"`
	FirstName     string `json:"firstname"`
}

/*
对于商品的操作包括

	搜索
	添加
	更新
	删除
*/
const goodsMapping = `
{
	"settings":{
		"number_of_shards": 1,
		"number_of_replicas": 0
	},
	"mappings":{
		"properties":{
			"name":{
				"type":"text",
				"analyzer":"ik_max_word"
			},
			"id":{
				"type":"integer"
			}
		}
	}
}`

func main() {
	//初始化一个连接
	/*
		这里必须将sniff设置为false，因为使用olivere/elastic连接elasticsearch时，发现连接地址明明输入的时候是网地址
		但是连接时会自动转换成内网地址或者docker中的ip地址，导致服务连接不上。
	*/
	host := "http://192.168.10.130:9200"
	logger := log.New(os.Stdout, "mxshop", log.LstdFlags)
	client, err := elastic.NewClient(elastic.SetURL(host), elastic.SetSniff(false),
		elastic.SetTraceLog(logger))
	if err != nil {
		panic(err)
	}
	//q := elastic.NewMatchQuery("address", "street")
	//result, err := client.Search().Index("user").Query(q).Do(context.Background())
	//if err != nil {
	//	panic(err)
	//}
	//total := result.Hits.TotalHits.Value
	//fmt.Printf("搜索结果数量：%d\n", total)
	//for _, value := range result.Hits.Hits {
	//	//if jsonData, err := value.Source.MarshalJSON(); err == nil {
	//	//	fmt.Println(string(jsonData))
	//	//} else {
	//	//	panic(err)
	//	//}
	//	account := Account{}
	//	_ = json.Unmarshal(value.Source, &account)
	//	fmt.Println(account)
	//}
	// Index a tweet (using JSON serialization)
	//account := Account{AccountNumber:12345,FirstName:"jzin imooc"}
	//put1, err := client.Index().
	//	Index("myuser").
	//	BodyJson(account).
	//	Do(context.Background())
	//if err != nil {
	//	// Handle error
	//	panic(err)
	//}
	//fmt.Printf("Indexed account %s to index %s", put1.Id, put1.Index)
	createIndex, err := client.CreateIndex("mygoods").BodyString(goodsMapping).Do(context.Background())
	if err != nil {
		panic(err)
	}
	if !createIndex.Acknowledged {
		panic("创建失败")
	}

}
